package com.fun.arithmetic;

import java.util.LinkedHashMap;

/**
 * 查出出现次数最大的字符，并且多个最大次数相同返回第一个的字符
 */
public class FindMaxNumChar {
    public static void main(String[] args){
        String str="aaabbb5555abohghhhafsdhyjurg";
        findMax(str);
    }
    public static void findMax(String str){
        long start=System.currentTimeMillis();
        //先转成char数组压压惊
        char[] chars=str.toCharArray();
        //第一种方法，利用LinkedHashMap
        LinkedHashMap<Character,Integer> map=new LinkedHashMap<>();
        //遍历一波计算每个字符的值
        for(int i=0;i<chars.length;i++){
            if(map.containsKey(chars[i])){
                map.put(chars[i],map.get(chars[i])+1);
            }else{
                map.put(chars[i],1);
            }
        }
        //找出最大的值
        int max=0;
        for(Integer a:map.values()){
            if(a>max){
                max=a;
            }
        }
        //找出最大值所在位置1
        for(Character c:map.keySet()){
            if(map.get(c)==max){
                System.out.println("出现次数最大的字符："+c+",出现了"+max+"次");
                break;
            }
        }
        System.out.println("耗时："+(System.currentTimeMillis()-start)+"ms");
    }

    public static void findMax2(String str) {
        long start = System.currentTimeMillis();
        //先转成char数组压压惊
        char[] chars = str.toCharArray();
        //第二种方法，继续数组

        System.out.println("耗时："+(System.currentTimeMillis()-start)+"ms");
    }
}
